#include<stdio.h>
#include<string.h>
#define N 110

typedef struct
{
    int x;
    int y;
    int step;
} P;

int m,n;
char map[N][N];
int vis[N][N];
P q[N*N];
P start;
P end;

int inload(P p)
{
    if(p.x>=0&&p.x<m&&p.y>=0&&p.y<n&&map[p.x][p.y]!='#')
    {
    	return 1;
	}
	return 0;
}

int hh=-1,tt=-1;
int dx[8]={0,0,1,-1,1,1,-1,-1};
int dy[8]={1,-1,0,0,1,-1,1,-1};

int bfs(P p)
{
	q[++tt]=p;
	while(hh<=tt)
	{
		p=q[++hh];
		if(p.x==end.x&&p.y==end.y)
		{
			printf("%d\n",p.step);
			return 0;
		}
		P next;
		for(int i=0;i<8;i++)
		{
			next.x=p.x+dx[i];
			next.y=p.y+dy[i];
			if(inload(next)&&!vis[next.x][next.y])
			{
				next.step=p.step+1;
				vis[next.x][next.y]=1; 
				q[++tt]=next;
			}
		}
	}
	return -1;
}

int main()
{
	int k=0;
	scanf("%d",&k);
    while(k--)
    {
    	memset(vis,0,sizeof(vis));
    	memset(q,0,sizeof(q));
    	hh=-1,tt=-1;
		scanf("%d%d",&m,&n);
		getchar();
        for(int i=0;i<m;i++)
	    {
	        for(int j=0;j<n;j++)
	        {
	            scanf("%c",*(map+i)+j);
	            if(map[i][j]=='A')
	            {
	            	start.x=i;
	            	start.y=j;
	            	start.step=0;
				}
				if(map[i][j]=='L')
				{
					end.x=i;
					end.y=j;
					end.step=0;
				}
	        }
	        getchar();
	    }
		int t=bfs(start);
		if(t==-1)
		{
			printf("I Need Move Point\n");
		}
		//printf("%c",map[0][0]);
	}
    return 0;
}
